package fr.charlott.core.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import fr.charlott.core.repository.ProduitJpaRepository;
import fr.charlott.core.repository.model.Collection;
import fr.charlott.core.repository.model.Produit;
import fr.charlott.core.repository.model.Saison;
import fr.charlott.core.service.ProduitService;

@Service("coreProduitService")
public class ProduitServiceImpl implements ProduitService {

	private ProduitJpaRepository produitJpaRepository;
	
	public ProduitServiceImpl() {
		super();
	}

	@Autowired
	public ProduitServiceImpl(ProduitJpaRepository produitJpaRepository) {
		this();
		this.produitJpaRepository = produitJpaRepository;
	}

	@Override
	@Transactional
	public Produit ajouterProduit(Produit produit) {
		Produit produitExist = chercherParReference(produit.getReference());
		if (produitExist != null) {
			produitExist.setCategorie(produit.getCategorie());
			produitExist.setCollection(produit.getCollection());
			produitExist.setNom(produit.getNom());
			produitExist.setPrix(produit.getPrix());
			produitExist.setSaison(produit.getSaison());
			return produitJpaRepository.saveAndFlush(produitExist);
		}else{
			return produitJpaRepository.saveAndFlush(produit);
		}
	}
	
	@Override
	@Transactional
	public void supprimerProduit(Produit produit) {
		produitJpaRepository.delete(produit);
	}
	
	@Override
	@Transactional
	public void supprimerTousLesProduits() {
		produitJpaRepository.deleteAll();
	}

	@Override
	@Transactional(readOnly = true)
	public Produit chercherParId(Long id) {
		return produitJpaRepository.findOne(id);
	}
	
	@Override
	@Transactional(readOnly = true)
	public Produit chercherParReference(String reference) {
		return produitJpaRepository.findByReference(reference);
	}
	
	@Override
	@Transactional(readOnly = true)
	public Produit chercherParNomEtReference(String nom, String reference) {
		return produitJpaRepository.findByNomAndReference(nom, reference);
	}

	@Override
	@Transactional(readOnly = true)
	public List<Produit> chargerTousLesProduits() {
		return produitJpaRepository.findAll();
	}
	
	@Override
	@Transactional(readOnly = true)
	public List<Produit> chargerTousLesProduitsPourLaSaison(Saison selectedSaison) {
		return produitJpaRepository.findBySaison(selectedSaison);
	}
	
	@Override
	public int getNbProduitVenudusParCollection(Collection collection, Saison saison){
		//return personneJpaRepository.getNbSoldedProductsByCollection(collection, dozerMapper.map(saison, Saison.class));
		return 0;
	}
	
	// getters - setters

	/**
	 * @param ProduitJpaRepository
	 *            the ProduitJpaRepository to set
	 */
	public void setProduitJpaRepository(ProduitJpaRepository produitJpaRepository) {
		this.produitJpaRepository = produitJpaRepository;
	}

}
